#pragma once
#include "collection/ArrayList.hpp"
namespace yzrilyzr_soundbank{
	class DLSModulator;
	class DLSSample;
	class DLSSampleOptions;
	EBCLASS(DLSRegion){
		public:
		static constexpr int const OPTION_SELFNONEXCLUSIVE=0x0001;
		yzrilyzr_collection::ArrayList<std::shared_ptr<DLSModulator>> modulators;
		uint16_t keyfrom;
		uint16_t keyto;
		uint16_t velfrom;
		uint16_t velto;
		uint16_t options;
		uint16_t exclusiveClass;
		uint16_t fusoptions;
		uint16_t phasegroup;
		uint32_t channel;
		std::shared_ptr<DLSSample> sample=nullptr;
		std::shared_ptr<DLSSampleOptions> sampleoptions;

		yzrilyzr_collection::ArrayList<std::shared_ptr<DLSModulator>> & getModulators(){
			return modulators;
		}

		long getChannel(){
			return channel;
		}

		void setChannel(long channel){
			this->channel=channel;
		}

		int getExclusiveClass(){
			return exclusiveClass;
		}

		void setExclusiveClass(int exclusiveClass){
			this->exclusiveClass=exclusiveClass;
		}

		int getFusoptions(){
			return fusoptions;
		}

		void setFusoptions(int fusoptions){
			this->fusoptions=fusoptions;
		}

		int getKeyfrom(){
			return keyfrom;
		}

		void setKeyfrom(int keyfrom){
			this->keyfrom=keyfrom;
		}

		int getKeyto(){
			return keyto;
		}

		void setKeyto(int keyto){
			this->keyto=keyto;
		}

		int getOptions(){
			return options;
		}

		void setOptions(int options){
			this->options=options;
		}

		int getPhasegroup(){
			return phasegroup;
		}

		void setPhasegroup(int phasegroup){
			this->phasegroup=phasegroup;
		}

		std::shared_ptr < DLSSample> getSample(){
			return sample;
		}

		void setSample(std::shared_ptr < DLSSample> sample){
			this->sample=sample;
		}

		int getVelfrom(){
			return velfrom;
		}

		void setVelfrom(int velfrom){
			this->velfrom=velfrom;
		}

		int getVelto(){
			return velto;
		}

		void setVelto(int velto){
			this->velto=velto;
		}

		std::shared_ptr < DLSSampleOptions> getSampleoptions(){
			return sampleoptions;
		}

		void setSampleoptions(std::shared_ptr < DLSSampleOptions> sampleOptions){
			this->sampleoptions=sampleOptions;
		}
	};
}